### 项目十六 蓝牙控制LED灯

1.项目介绍

![](./media/image-20250722145736095.png)

DX-BT24 5.1蓝牙模块是为智能无线数据传输而打造，采用英国DAILOG公司14531芯片，配置256Kb 空间，遵循V5.1 BLE蓝牙规范。支持AT指令，用户可根据需要更改串口波特率、设备名称等参数，使用灵活。本模块支持UART接口，并支持蓝牙串口透传，具有成本低、体积小、功耗低、收发灵敏性高等优点，只需配备少许的外围元件就能实现其强大功能。

在实验中，我们默认为把蓝牙模块当做从机，手机当做主机。实验中我们在手机上安装对应的APP，在APP上连接蓝牙模块，然后通过手机APP控制智能家居的各元器件实现相应的功能和效果。为此我们还特别设计了分别支持安卓系统和mac系统的手机APP。

2.模块相关资料

（1）参数

- 蓝牙协议：Bluetooth Specification V5.1 BLE

- 工作距离：在开放环境中，实现40m超远距离通讯

- 工作频率：2.4GHz ISM频段

- 通信接口：UART

- 蓝牙认证：符合FCC CE ROHS REACH认证标准

- 串口参数：9600、8数据位、1停止位、无效位、无流控

- 电源：5V DC

- 工作温度：–10至+65摄氏度

（2）应用领域

DX-BT24 模块同时支持 BT5.1 BLE 协议，可以同具备 BLE 蓝牙功能的 iOS设备直接连接，支持后台程序常驻运行。主要用于短距离的数据无线传输领域。避免繁琐的线缆连接，能直接替代串口线。BT24 模块成功应用领域：

- 蓝牙无线数据传输； 
- 手机、电脑周边设备； 
- 手持 POS 设备；
- 医疗设备无线数据传输； 
- 智能家居控制； 
-  蓝牙打印机；
- 蓝牙遥控玩具；
- 共享单车；

（3）接口说明：

![](./media/image-20250722150119664.png)

①STATE：状态脚

②RX：接收脚

③TX：发送脚

④GND：接地脚

⑤VCC：电源脚

⑥EN：使能脚

3.实验组件

| 控制板 * 1                               | 扩展板 * 1                               | LED模块* 1                               | BT-24蓝牙*1                              | 3P 转杜邦线母 *1                         |
| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
| ![](./media/image-20250722105621894.png) | ![](./media/image-20250722105632148.png) | ![](./media/image-20250722150322485.png) | ![](./media/image-20250722150333438.png) | ![](./media/image-20250722105711010.png) |

4.模块接线图

![](./media/image-20250722150404093.png)

注：蓝牙对好接口插上去即可

特别注意：：在上传测试代码时，不能连接蓝牙模块，需要把蓝牙模块取下，否则程序上传不成功。先上传测试代码，成功后再连接蓝牙和蓝牙模块，配对，连接APP。

5.测试代码

```
/*
  keyes Aduino智能家居套装
  课程16
  蓝牙控制LED
  http://www.keyes-robot.com
*/
int ledpin = 5; //定义LED接口D5

void setup()
{
  Serial.begin(9600); //设置串口波特率为9600
  pinMode(ledpin, OUTPUT);//设置LED接口为输出模式
}

void loop()
{
  char val; //val为字符型
  while (Serial.available()>0)
  {
    val = Serial.read(); //读取蓝牙发送的值
    Serial.println(val);  //串行端口打印数值
    if (val == 'a')  //当数值等于a时点亮LED灯
    {
      digitalWrite(ledpin, HIGH);
    }
    if (val == 'b') //当数值等于b时熄灭LED灯
    {
      digitalWrite(ledpin, LOW);
    }
  }
}
```

6.APP下载和简介

（1）安卓系统手机蓝牙APP（国内）：

下载链接：**http://8.210.52.206/keyes-IoT.apk**

二维码下载：

![](./media/image-20250722150912824.png)

下载安装后打开

![](./media/image-20250722150928732.png)

出现如下图界面。

![](./media/image-20250722150949184.png)

控制板上传代码成功后，连接蓝牙，上电后，蓝牙模块上LED闪烁。开启手机蓝牙，点击左上角的SCANING按钮，进行蓝牙搜索和连接。

![](./media/image-20250722151039040.png)

点击连接，蓝牙BT24连接成功，显示如下图，蓝牙模块上的LED变为常亮。

![](./media/image-20250722151057786.png)

（2）苹果系统手机（平板电脑）APP：

打开App Store。

![](./media/image-20250722151229177.png)

在APP Store上搜索IoT keyes，点击获取，下载安装APP即可。

![](./media/image-20250722151249629.png)

下载安装后打开

![](./media/image-20250722151303190.png)

出现如下图界面。

![](./media/image-20250722151319322.png)

点击Connect，再点击BT24就可以连接上蓝牙了,此时蓝牙的红色指示灯为常亮。

![](./media/image-20250722151334571.png)

![](./media/image-20250722151344910.png)

在APP中有16个控制按键，当手机APP成功连接上BT-24蓝牙后，我们按下APP控制按键，每按下一个APP上的按键蓝牙发送一个控制字符，蓝牙模块就能接收到一个对应的控制字符，我们在编程时，根据对应按键控制字符设置智能家居各传感器或模块的对应功能。在这个实验中，我们先测试出16个按键对应的控制字符。

7.实验结果

上传好测试程序，如上打开APP连接上蓝牙，点击一下![](./media/image-20250722151426003.png)点亮黄色LED灯，再点击一下熄灭LED灯。打开串口监视器，设置波特率为9600。按下手机APP上功能按钮，我们可以看到APP上功能按钮对应的控制字符，如下图：

![](./media/image-20250722151444121.png)

经过测试，我们得出了手机APP上各个按钮对应的控制字符和各个按钮对应的功能，这里我们整理了一个表格如下：**（说明：下图是安卓手机的APP一些操作说明界面（ios的界面基本一样））**

 按钮:![](./media/00166855cc0493ef6340ab202f129959.png) 功能：配对连接HM-10蓝牙模块

 按钮:

![](./media/image-20250722151503650.png)

功能：断开蓝牙连接

按钮: ![](./media/image-20250722151426003.png)控制字符：点一下发送 “a”；再点一下发送“b”。

按钮:![](./media/image-20250722151631734.png)控制字符：点一下发送 “c”；再点一下发送“d”。

按钮:![](./media/image-20250722151701768.png)控制字符：按住发送 “e”；松开发送“g”。

按钮:![](./media/image-20250722151734989.png) 控制字符：按住发送 “f”；松开发送“g”。

按钮:![](./media/image-20250722151810462.png)控制字符：点一下发送 “h”；再点一下发送“S”。

按钮:![](./media/image-20250722151840234.png)控制字符：点一下发送 “i”；再点一下发送“S”。

按钮:![](./media/image-20250722151928760.png)控制字符：点一下发送 “j”；再点一下发送“S”。

按钮:![](./media/image-20250722152418622.png)控制字符：点一下发送 “k”；再点一下发送“S”。

按钮:![](./media/image-20250722152445437.png)控制字符：点一下发送 “l”；再点一下发送“m”。

 拖动条:

![](./media/image-20250722152508947.png)

控制字符：拖动拖动条松开时发送“t 50#”，字符‘t’表示起始字符；

数字50表示舵机1的角度；

字符‘#’表示终止字符。

按钮:![](./media/image-20250722152822595.png)控制字符：点一下发送 “n”；再点一下发送“o”。

 拖动条:![](./media/image-20250722152900214.png)

控制字符：拖动拖动条松开时发送“u 34#”，字符‘u’表示起始字符；

数字34表示舵机2的角度；

字符‘#’表示终止字符。

按钮:![](./media/image-20250722153034666.png)控制字符：点一下发送 “p”；再点一下发送“q”。

拖动条:

![](./media/image-20250722153104269.png)

控制字符：拖动拖动条松开时发送“v 100#”，字符‘v’表示起始字符；

数字100表示led2的PWM值；

字符‘#’表示终止字符。

按钮:![](./media/image-20250722153353769.png)控制字符：点一下发送 “r”；再点一下发送“s”。

 拖动条:![](./media/image-20250722153426277.png)

控制字符：拖动拖动条松开时发送“w 153#”，字符‘w’表示起始字符；

数字153表示小风扇的PWM值；

字符‘#’表示终止字符。